﻿namespace Tszy.Unlimited.Data.AdoNet.Sql.Descriptors
{
    /// <summary>
    /// 逻辑表达式描述器。
    /// </summary>
    public interface IWhereLogicalExpressionDescriptor
    {
        /// <summary>
        /// 表达式左边。
        /// </summary>
        WhereLogicalExpressionParameter Left { get; }

        /// <summary>
        /// 表达式右边。
        /// </summary>
        WhereLogicalExpressionParameter Right { get; }

        /// <summary>
        /// 逻辑符。
        /// </summary>
        string LogicalTag { get; }
    }

    /// <summary>
    /// 逻辑表达式描述器。
    /// </summary>
    public class WhereLogicalExpressionDescriptor : IWhereLogicalExpressionDescriptor
    {
        /// <summary>
        /// 表达式左边。
        /// </summary>
        public WhereLogicalExpressionParameter Left { get; set; }

        /// <summary>
        /// 表达式右边。
        /// </summary>
        public WhereLogicalExpressionParameter Right { get; set; }

        /// <summary>
        /// 逻辑符。
        /// </summary>
        public string LogicalTag { get; set; }
    }

    /// <summary>
    /// 逻辑表达式参数。
    /// </summary>
    public class WhereLogicalExpressionParameter
    {
        /// <summary>
        /// 比较表达式描述器。
        /// </summary>
        public IWhereComparisonExpressionDescriptor ComparisonExpressionDescriptor { get; set; }

        /// <summary>
        /// 逻辑表达式描述器。
        /// </summary>
        public IWhereLogicalExpressionDescriptor LogicalExpressionDescriptor { get; set; }

        /// <summary>
        /// 变量表达式描述。
        /// </summary>
        public IWhereMemberExpressionDescriptor MemberExpressionDescriptor { get; set; }

        /// <summary>
        /// 函数表达式描述器。
        /// </summary>
        public IWhereCallExpressionDescriptor CallExpressionDescriptor { get; set; }
    }
}